<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="s" uri="/struts-tags" %>
<%@ page import="java.time.Instant" %><%--
  Created by IntelliJ IDEA.
  User: lzy
  Date: 2018/9/6
  Time: 22:09
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Index</title>
</head>
<body>
<%
    if (application.getAttribute("date") == null) {
        application.setAttribute("date", Instant.now());
    }
%>

<h4 style="color: blue">Weclome to demo</h4>

<%--
   问题1：如何覆盖默认的错误消息？
   1）在对应的Action类所在的包中新建ActionClassName.properties文件，
   ActionClassName即为包含着输入字段的Action类的类名
   2）在属性文件中添加如下键值对：invalid.fieldValue.fieldName=xxx


   问题2：如果是simple主题，还会自动显示错误消息么？如果不显示，怎么办？
   1）simple不会自动显示错误消息。
   2）通过debug标签，可知若转换出错，则在值栈的Action（实现了ValidationAware接口）对象中有一个fieldErrors属性。
   该属性的类型为Map<String,List<String>>键：字段（属性名），值：错误消息组成的List，所以可以使用EL或OGNL的方式来显示错误消息：${fieldErrors.age[0]}
   3) 还可以使用s:fieldErrors标签来显示，可以通过fieldName属性显示指定字段的错误。

   问题3：若是simple主题，且使用<s:textfield name="age" label="Age"/>来显示错误消息，则该消息在一个ul,li,span中，如何去除ul，li，span？
   在template.simple下面的fielderror.ftl中定义了simple主题下，s:fielderror标签显示错误消息的样式，所以修改该配置文件即可。
   在src下新建template.simple包，新建fielderror.ftl文件，把原生的fielderror.ftl文件的内容拷贝到新建文件中，然后去掉ul,li,span标签即可

   问题4：如何自定义类型转换器？
   1）为什么需要自定义的类型转换器？因为struts不能自动完成字符串到引用类型的转换
   2）如何定义类型转换器
   a)开发类型转换器的类：扩展StrutsTypeConverter类
   b)配置类型转换器
   有两种：
   ① 基于字段的配置：
     >在字段所在的model（可能是Action，可能是一个JavaBean）的包下，新建一个ModelClassName-converter.properties
     >在该文件中输入键值对：fieldName:类型转换器的全类名
     >第一次使用该转换器的时候创建该转换器实例

   ② 基于类型的配置：
     >在src下新建xwork-conversion.properties
     >键入：带转换的类型=类型转换器的全类名
     >在当前struts2应用被加载时创建实例

   3) 对于第一种情况类型转换器是单实例的，而对于第二种情况，类型转换器不是单实例的。
--%>
<s:debug/>

<s:form action="testToken">
    <s:token/>
    <s:textfield name="username" label="User name"/>
    <s:submit/>
</s:form>

<a href="forwardToFileUpload.action">Goto file upload</a>
<br/><br/>
<a href="forwardToFileDownload.action">Goto file download</a>
<%--<a href="forwardToValidation.action">Goto validate test</a>--%>

<%--<s:form action="testConversion" theme="simple">--%>
<%--Age:&nbsp;&nbsp;<s:textfield name="age" label="Age"/><s:fielderror fieldName="age"/><br/>--%>
<%--Birthday: &nbsp;&nbsp;<s:textfield name="birth" label="Birthday"/><s:fielderror fieldName="birth"/><br/>--%>
<%--<s:submit label="Submit"/>--%>
<%--</s:form>--%>
<%--<hr/>--%>
<%--<a href="forwardToTest.action">Forward to test complex property</a>--%>
<%--<br/><br/>--%>
<%--<a href="forwardToDynamic.action">Forward to test dynamic input</a>--%>

<%--<a href="employee-list.action">List all employees</a>--%>
<%--<a href="emp-input.action">Emp input page</a>--%>

<%--<a href="goFormTag.action">Goto form tag test</a>--%>
<%--<br/><br>--%>
<%--<a href="testTagAction.action?name=atguigu">Goto tag test</a>--%>
<%--<br/><br/>--%>
<%--<form action="testTagAction.action" METHOD="post">--%>
<%--<label>--%>
<%--<input type="text" name="username">--%>
<%--</label>--%>
<%--<input type="submit" value="Submit">--%>
<%--</form>--%>

<%--<a href="forwordToVsInput.action">Go to product input</a>--%>
<%--<br/><br/>--%>
<%--<a href="product-input.action">Product input</a>--%>
<%--<br/><br/>--%>
<%--<a href="TestActionContext.action?name=atguigu">Test ActionContext</a>--%>
<%--<br/><br/>--%>
<%--<a href="TestAwareAction.action?name=atguigu">Test ActionContext2</a>--%>
<%--<br/><br/>--%>
<%--<a href="TestServletContext.do?name=atguigu">Test ServletActionContext</a>--%>
<%--<br/><br/>--%>
<%--<a href="TestServletAware.do?name=atguigu">Test ServletAware</a>--%>
<%--<br/><br/>--%>
<%--<a href="login-ui.action">Login</a>--%>
<%--<br/><br/>--%>
<%--<a href="testActionSupport.action">testActionSupport</a>--%>
<%--<br/><br/>--%>
<%--<form action="testResult.action" method="post">--%>
<%--根据数字跳转页面: &nbsp;&nbsp;<input type="text" name="number">--%>
<%--<input type="submit" value="Submit">--%>
<%--</form>--%>
<%--<a href="testResult.action?number=3">Test Result</a>--%>
<%--<br/><br/>--%>
<%--<a href="list-wildcard.action">wildcard test</a>--%>
<%--<br/><br/>--%>
<%--<a href="testDynamicMethodInvocationAction.action">test DynamicMethodInvocationAction</a>--%>
<%--<br/><br/>--%>

</body>
</html>
